extends CardState

func enter() -> void:
	var ui_layer = get_tree().get_first_node_in_group("ui_layer")
	#将card_ui的父节点更改为ui_layer,因为我们需要把卡牌拖出原本的父容器hand,不更改父节点无法移动到hand外
	if ui_layer:
		card_ui.reparent(ui_layer)
	card_ui.panel.set("theme_override_styles/panel", card_ui.DRAGGING_STYLE_PANEL)
	Events.card_drag_started.emit(card_ui)

func exit() -> void:
	Events.card_drag_ended.emit(card_ui)

#这里不能用GUI，因为鼠标超出卡牌范围后就没法再触发回调函数，而鼠标是有可能离开卡牌范围的
func on_input(event: InputEvent) -> void:
	var single_targeted := card_ui.card.is_singel_enemy()
	var mouse_motion := event is InputEventMouseMotion
	var cancel = event.is_action_pressed("right_mouse")
	var confirm = event.is_action_released("left_mouse") or event.is_action_pressed("left_mouse")
	#如果是攻击单个敌人卡牌，且鼠标移动到界面上方碰撞区域，则转换到瞄准状态
	if single_targeted and mouse_motion and card_ui.targets.size() > 0:
		transition_requested.emit(self, CardState.State.AIMING)
		return
	#更改卡片的全局位置，使得卡牌跟随鼠标移动
	if mouse_motion:
		card_ui.global_position = card_ui.get_global_mouse_position() - card_ui.pivot_offset
	#一旦开始拖拽，就会进入这个函数，那么马上就会触发targets是空的判断，所以不能把targets的空判断写在这里
	if cancel:
		transition_requested.emit(self, CardState.State.BASE)
	elif confirm:
		#当用户释放或按下左键时，我们把这个输入标记为“已处理”，防止其他 UI 元素对这个点击做出反应，然后切换状态到 RELEASED。
		get_viewport().set_input_as_handled()
		transition_requested.emit(self, CardState.State.RELEASED)
		
